package io.renren.service;

import com.baomidou.mybatisplus.service.IService;
import io.renren.bean.ExamQuestionInfo;
import io.renren.bean.ExamResult;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;
import io.renren.entity.ExamEntity;
import io.renren.entity.StudentEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 考试表
 *
 * @author LANLING
 * @email lanling@gmail.com
 * @date 2018-10-30 14:56:07
 */
public interface ExamService extends IService<ExamEntity> {

    /***
     * 获取考试信息  主要获取剩余时间
     * @param examId 试卷id
     * @return
     */
    Map<String, Object> getPaperMap(@Param("examId") Integer examId);

    /**
     * 创建试卷
     *
     * @param @param  student 学员
     * @param @param  subjectId 科目id
     * @param @return
     * @return R
     * @author huolikang
     * @date 2018年10月31日
     */
    public R createExamPaper(StudentEntity student,
                             Integer subjectId);

    /**
     * 获取考试记录
     *
     * @param @param  studentId 学员id
     * @param @param  subjectId 科目id
     * @param @return
     * @return CommonResult
     * @throws
     * @Description: TODO
     * @author huolikang
     * @date 2018年10月30日
     */
    List<Map<String, Object>> getExamList(@Param("studentId") Long studentId, @Param("subjectId") Integer subjectId);

    /***
     * 查看是否能创建试卷
     * 0.表示通过；
     * 1.表示选中的科目不存在或者已被删除；
     * 2.表示暂无可用于考试的试卷；
     * 3.表示有未提交的试卷；
     * 4.表示超出考试有效次数；
     * 5.表示考试时间已过期，
     * 6.表示暂未到考试时间
     * @param subjectId 科目id
     * @param studentId 学员id
     * @return
     */
    Integer checkCreateExam(@Param("subjectId") Integer subjectId, @Param("studentId") Long studentId);

    /**
     * 创建试卷 并返回id
     *
     * @param studentId 学员id
     * @param subjectId 科目id
     * @return integer
     */
    Integer createExam(@Param("studentId") Long studentId, @Param("subjectId") Integer subjectId);

    /***
     * 获取考试题目
     *
     * @param examId 试卷id
     * @param studentId 学员id
     * @return R
     */
    ExamQuestionInfo getExamQuestionInfo(@Param("examId") Integer examId, @Param("studentId") Long studentId);

    /**
     * 提交某一道题的答案
     *
     * @param @param student.getUserId() 学员id
     * @param @param examId 考试id
     * @param @param questionId 问题id
     * @param @param sort 序号
     * @param @param remainExamSecond 考试剩下时间（秒）
     * @param @param studentAnswer 学员答案
     * @return R
     * @author huolikang
     * @date 2018年11月1日
     */
    public void submitQuestion(Integer examId, Integer questionId, Integer sort, Integer remainExamSecond, String studentAnswer);

    /**
     * 学员提交试卷
     *
     * @param examId    考试id
     * @param subjectId 科目id
     * @param studentId 学员id
     * @return R
     * @author huolikang
     * @date 2018年11月2日
     */
    ExamResult submitExam(@Param("examId") Integer examId, @Param("subjectId") Integer subjectId, @Param("studentId") Long studentId);

    /**
     * 获取考试记录
     *
     * @param params 分页用
     * @param page   默认第一页
     * @param size   默认一页10条数据
     * @return R
     * @author huolikang
     * @date 2018年10月30日
     */
    PageUtils queryPage(Map<String, Object> params, Integer page, Integer size);



    /***
     * 查找学员未提交试卷id
     * @param studentId
     * @param subjectId
     * @return
     */
    Integer findUnommExamId(@Param("studentId") Long studentId, @Param("subjectId") Integer subjectId);



    /***
     * 获取剩余时间
     * @param paperMap
     * @return
     */
    Integer getRemainExamSecond(Map<String, Object> paperMap);
}

